/**
 * @author phi
 */

(function(np){
    
    np = np || window;
    
    /**
     * スターパスセット
     * @param   {CanvasRenderingContext2D}  ctx 描画先コンテキスト
     * @param   {Number}    x 値
     * @param   {Number}    y 値
     * @param   {Number}    radius  半径
     * @param   {Number}    sides   辺の数
     * @param   {Number}    sideIndent  凹み(0.0 ~ 1.0)
     * @param   {Number}    offsetAngle 角度(省略時は270°)
     */
    np.star = function(ctx, x, y, radius, sides, sideIndent, offsetAngle)
    {
        // 内円の大きさ(radius * sideIndent)
        var sideIndentRadius = radius * (sideIndent || 0.38);
        var radOffset = (offsetAngle) ? offsetAngle*Math.PI/180 : -Math.PI/2;
        var radDiv = (Math.PI*2)/sides/2;
        
        ctx.moveTo(
            x + Math.cos(radOffset)*radius,
            y + Math.sin(radOffset)*radius
        );
        for (var i=1; i<sides*2; ++i) {
            var rad = radDiv*i + radOffset;
            // 内円, 外円を交互にパスをセット
            var len = (i%2) ? sideIndentRadius : radius;
            ctx.lineTo(
                x + Math.cos(rad)*len,
                y + Math.sin(rad)*len
            );
        }
        ctx.closePath();
    };
    
    /**
     * スター塗りつぶし描画
     * @param   {CanvasRenderingContext2D}  ctx 描画先コンテキスト
     * @param   {Number}    x 値
     * @param   {Number}    y 値
     * @param   {Number}    radius  半径
     * @param   {Number}    sides   辺の数
     * @param   {Number}    sideIndent  凹み(0.0 ~ 1.0)
     * @param   {Number}    offsetAngle 角度(省略時は270°)
     */
    np.fillStar = function(ctx, x, y, radius, sides, sideIndent, offsetAngle)
    {
        ctx.beginPath();
        star(ctx, x, y, radius, sides, sideIndent, offsetAngle);
        ctx.fill();
    };
    
    /**
     * スターストローク描画
     * @param   {CanvasRenderingContext2D}  ctx 描画先コンテキスト
     * @param   {Number}    x 値
     * @param   {Number}    y 値
     * @param   {Number}    radius  半径
     * @param   {Number}    sides   辺の数
     * @param   {Number}    sideIndent  凹み(0.0 ~ 1.0)
     * @param   {Number}    offsetAngle 角度(省略時は270°)
     */
    np.strokeStar = function(ctx, x, y, radius, sides, sideIndent, offsetAngle)
    {
        ctx.beginPath();
        star(ctx, x, y, radius, sides, sideIndent, offsetAngle);
        ctx.stroke();
    };
    
})();